/* 
 * Enterprise Library Extensions - DI + ORM.
 * Copyright (C) 2006
 *
 * GNU General Public License
 *
 * This program is free software; you can redistribute 
 * it and/or modify it under the terms of the GNU General Public License 
 * as published by the Free Software Foundation; either version 2 of the 
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful, but 
 * WITHOUT ANY WARRANTY; without even the implied warranty of 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
 * See the GNU General Public License for more details.
 */
using System;
using System.Collections;

namespace ELE.EnterpriseLibrary.Naming.Spi
{
	/// <summary>
  /// This interface represents a factory that creates an initial context. 
  /// <br/><br/>The ONDI framework allows for different initial context implementations to be specified at runtime. 
  /// The initial context is created using an initial context factory. 
  /// An initial context factory must implement the InitialContextFactory interface, which provides a method for 
  /// creating instances of initial context that implement the Context interface. In addition, the factory class 
  /// must be public and must have a public constructor that accepts no arguments. 
	/// </summary>
	public interface IInitialContextFactory
	{
    /// <summary>
    /// Creates an Initial Context for beginning name resolution. Special requirements of this context are supplied 
    /// using environment. 
    /// <br/><br/>The environment parameter is owned by the caller. The implementation will not modify the object 
    /// or keep a reference to it, although it may keep a reference to a clone or copy.
    /// </summary>
    /// <param name="environment">The possibly null environment specifying information to be used in the creation 
    /// of the initial context.</param>
    /// <returns>A non-null initial context object that implements the Context interface.</returns>
    INamingContext GetInitialContext(Hashtable environment);

	}
}
